import QtCore
import QtQuick
import QtQuick.Controls
import QtQuick.Window
import QtQuick.Layouts
import TSCore.Presentation
import "styles" as Styles
import "components" as Components

Window {
    id: window
    width: 1400
    height: 900
    visible: false // 先隐藏，等ViewModels设置完成后再显示
    title: qsTr("AGV调度系统")

    // 尝试使用完全无边框窗口来避免白边
    flags: Qt.Window | Qt.FramelessWindowHint

    // 设置Window背景色，避免白边 - 使用与AppShell相同的surface颜色
    color: Styles.Theme.surface

    // 关闭确认对话框
    Components.ConfirmDialog {
        id: closeConfirmDialog
        title: qsTr("退出确认")
        message: qsTr("确定要退出AGV调度系统吗?")
        detailText: qsTr("退出后所有未完成的任务将停止执行。")
        iconText: "❓"
        confirmText: qsTr("退出")
        cancelText: qsTr("取消")

        callback: function() {
            confirmAndQuit()
        }
    }

    // 这些属性现在仅用于兼容性，实际使用GlobalXXXViewModel全局上下文属性
    property var mapViewModel: null
    property var dashboardViewModel: null
    property var taskViewModel: null
    property var vehicleViewModel: null

    // 注意：现在所有QML组件直接使用 GlobalMapViewModel, GlobalDashboardViewModel 等全局上下文属性

    // 添加可跟踪的置顶状态属性
    property bool windowOnTop: (flags & Qt.WindowStaysOnTopHint) !== 0
    property bool closeConfirmed: false

    // 拦截窗口关闭事件
    onClosing: function(close) {
        if (closeConfirmed) {
            closeConfirmed = false
            close.accepted = true
            return
        }

        close.accepted = false // 阻止直接关闭
        closeConfirmDialog.open() // 显示确认对话框
    }

    // 窗口功能函数
    function toggleFullScreen() {
        if (window.visibility === Window.FullScreen || window.visibility === Window.Maximized) {
            window.showNormal();
        } else {
            window.showMaximized(); // 使用showMaximized避免拖动bug
        }
    }

    function confirmAndQuit() {
        closeConfirmed = true
        Qt.quit()
    }

    // 主应用程序界面
    Loader {
        id: appShellLoader
        anchors.fill: parent
        anchors.margins: 0  // 确保完全填充，不留任何边距
        source: "qrc:/qml/AppShell.qml"

        onLoaded: {
            // 简化：只需要连接窗口控制信号，不再传递ViewModels
            if (item) {
                // 连接AppShell的窗口控制信号到原生窗口函数
                item.windowMinimize.connect(function() {
                    window.showMinimized()
                })
                item.windowMaximize.connect(function() {
                    window.toggleFullScreen()
                })
                item.windowRestore.connect(function() {
                    window.showNormal()
                })
                item.windowClose.connect(function() {
                    closeConfirmDialog.open()
                })
                item.windowToggleOnTop.connect(function() {
                    window.flags ^= Qt.WindowStaysOnTopHint
                    var newState = (window.flags & Qt.WindowStaysOnTopHint) !== 0
                    console.log("Window on top toggled:", newState)

                    // 更新可跟踪的属性
                    window.windowOnTop = newState
                    // 显式更新 isOnTop 属性以确保 UI 反馈
                    item.isOnTop = newState
                })
                item.windowStartDrag.connect(function() {
                    window.startSystemMove()
                })

                // 传递窗口状态给AppShell
                item.isMaximized = Qt.binding(function() {
                    return window.visibility === Window.Maximized
                })
                item.isOnTop = Qt.binding(function() {
                    return window.windowOnTop
                })
            }
        }
    }

    Component.onCompleted: {
        console.log("Initializing custom borderless window...")

        // ViewModels现在由ModuleManager创建为全局上下文属性，无需在此初始化

        // 设置完成后显示窗口
        window.visible = true
        console.log("Custom borderless window loaded")
    }
}
